home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1995, Silicon Graphics, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation for any purpose is hereby granted without fee, provided
- * that the name of Silicon Graphics may not be used in any advertising or
- * publicity relating to the software without the specific, prior written
- * permission of Silicon Graphics.
- *
- * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- *
- * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE
- * POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
- */
- /*----------------------------------------------------------------------------
- *
- * file : ui.c
- *
- * Author : Yusuf Attarwala
- * Date : Apr 95
- *
- *---------------------------------------------------------------------------*/
-
- #include "Xmincludes.h"
- #include "globals.h"
- #include "lm.h"
- #include <Xm/Protocols.h>
-
- static Arg args[40];
- static int argcnt;
-
- static char *scrollCBs[] = {
- XmNincrementCallback,
- XmNdecrementCallback,
- XmNdragCallback,
- };
-
- static void lmodelCB(),
- matCB(),
- lightCB(),
- toggleOffCB(),
- resetView(),
- toggleOnCB();
-
- static char *lmodels[] = {"Infinite",
- "Local",
- "Inf 2 Sided",
- };
-
- static char *mats[] = {"Brass & Red Plastic",
- "Silver & Grn Plastic",
- };
-
- static char *lights[] = {"White Inf Light",
- "Red Inf Light",
- };
-
- static char *toggles[] = { "Tumble",
- };
-
-
- static char *buttons[] = {"Reset View",
- "Exit"};
-
- extern void doExit();
-
- void
- createMenus(parent)
- Widget parent;
- {
-
- int i;
- Widget tb;
- void buttonCB();
- Widget form,lmodelFrame,matFrame,lightFrame,toggleFrame,buttonFrame;
- Widget lmodelRB,matRB,lightRB,toggleRC,rc,rb,label,buttonRC;
- Widget onOff[10][2];
-
- form = XtVaCreateManagedWidget("form",
- xmFormWidgetClass,parent,
- NULL);
-
- lmodelFrame = XtVaCreateManagedWidget("ui",
- xmFrameWidgetClass, form,
- XmNleftAttachment, XmATTACH_FORM,
- XmNleftOffset, 1,
- XmNtopAttachment, XmATTACH_FORM,
- XmNtopOffset, 1,
- XmNrightAttachment, XmATTACH_FORM,
- XmNrightOffset, 1,
- NULL);
-
- matFrame = XtVaCreateManagedWidget("ui",
- xmFrameWidgetClass, form,
- XmNleftAttachment, XmATTACH_FORM,
- XmNleftOffset, 1,
- XmNtopAttachment, XmATTACH_FORM,
- XmNtopOffset, 1,
- XmNrightAttachment, XmATTACH_FORM,
- XmNrightOffset, 1,
- XmNtopAttachment, XmATTACH_WIDGET,
- XmNtopWidget, lmodelFrame,
- NULL);
-
- lightFrame = XtVaCreateManagedWidget("ui",
- xmFrameWidgetClass, form,
- XmNleftAttachment, XmATTACH_FORM,
- XmNleftOffset, 1,
- XmNtopAttachment, XmATTACH_FORM,
- XmNtopOffset, 1,
- XmNrightAttachment, XmATTACH_FORM,
- XmNrightOffset, 1,
- XmNtopAttachment, XmATTACH_WIDGET,
- XmNtopWidget, matFrame,
- NULL);
-
- toggleFrame = XtVaCreateManagedWidget("ui",
- xmFrameWidgetClass, form,
- XmNleftAttachment, XmATTACH_FORM,
- XmNleftOffset, 1,
- XmNtopAttachment, XmATTACH_WIDGET,
- XmNtopWidget, lightFrame,
- XmNrightAttachment, XmATTACH_FORM,
- XmNrightOffset, 1,
- NULL);
- buttonFrame = XtVaCreateManagedWidget("ui",
- xmFrameWidgetClass, form,
- XmNtopAttachment, XmATTACH_WIDGET,
- XmNtopWidget, toggleFrame,
- XmNleftAttachment, XmATTACH_FORM,
- XmNleftOffset, 1,
- XmNrightAttachment, XmATTACH_FORM,
- XmNrightOffset, 1,
- XmNbottomAttachment, XmATTACH_FORM,
- NULL);
-
-
- lmodelRB = XtVaCreateManagedWidget("lmodelRB",
- xmRowColumnWidgetClass, lmodelFrame,
- XmNpacking, XmPACK_TIGHT,
- XmNradioBehavior, True,
- XmNradioAlwaysOne, True,
- XmNmarginWidth, 0,
- XmNmarginHeight, 0,
- NULL);
-
- matRB = XtVaCreateManagedWidget("matRB",
- xmRowColumnWidgetClass, matFrame,
- XmNpacking, XmPACK_TIGHT,
- XmNradioBehavior, True,
- XmNradioAlwaysOne, True,
- XmNmarginWidth, 0,
- XmNmarginHeight, 0,
- NULL);
-
- lightRB = XtVaCreateManagedWidget("lightRB",
- xmRowColumnWidgetClass, lightFrame,
- XmNpacking, XmPACK_TIGHT,
- XmNradioBehavior, True,
- XmNradioAlwaysOne, True,
- XmNmarginWidth, 0,
- XmNmarginHeight, 0,
- NULL);
-
- toggleRC = XtVaCreateManagedWidget("toggleRC",
- xmRowColumnWidgetClass, toggleFrame,
- XmNpacking, XmPACK_TIGHT,
- XmNmarginWidth, 0,
- XmNmarginHeight, 0,
- NULL);
-
- for (i=0;i<XtNumber(lmodels);i++) {
- tb = XtVaCreateManagedWidget(lmodels[i],
- xmToggleButtonWidgetClass, lmodelRB,
- XmNspacing, 2,
- NULL);
-
- if (i==0) XmToggleButtonSetState(tb,True,True);
- XtAddCallback(tb,XmNarmCallback,lmodelCB,(XtPointer)i);
- }
- for (i=0;i<XtNumber(mats);i++) {
- tb = XtVaCreateManagedWidget(mats[i],
- xmToggleButtonWidgetClass, matRB,
- XmNspacing, 2,
- NULL);
-
- if (i==0) XmToggleButtonSetState(tb,True,True);
- XtAddCallback(tb,XmNarmCallback,matCB,(XtPointer)i);
- }
- for (i=0;i<XtNumber(lights);i++) {
- tb = XtVaCreateManagedWidget(lights[i],
- xmToggleButtonWidgetClass, lightRB,
- XmNspacing, 2,
- NULL);
-
- if (i==0) XmToggleButtonSetState(tb,True,True);
- XtAddCallback(tb,XmNarmCallback,lightCB,(XtPointer)i);
- }
-
- for (i=0;i<XtNumber(toggles);i++) {
- rc = XtVaCreateManagedWidget("rc",
- xmRowColumnWidgetClass,toggleRC,
- XmNpacking, XmPACK_TIGHT,
- XmNmarginWidth, 0,
- XmNmarginHeight, 0,
- XmNorientation, XmHORIZONTAL,
- NULL);
-
- rb = XtVaCreateManagedWidget("rb",
- xmRowColumnWidgetClass, rc,
- XmNpacking, XmPACK_TIGHT,
- XmNradioBehavior, True,
- XmNradioAlwaysOne, True,
- XmNmarginWidth, 0,
- XmNmarginHeight, 0,
- XmNorientation, XmHORIZONTAL,
- NULL);
- onOff[i][0] = XtVaCreateManagedWidget("Off",
- xmToggleButtonWidgetClass,rb,
- NULL);
- XmToggleButtonSetState(onOff[i][0],True,True);
- XtAddCallback(onOff[i][0],XmNarmCallback,toggleOffCB,(XtPointer)i);
- onOff[i][1] = XtVaCreateManagedWidget("On ",
- xmToggleButtonWidgetClass,rb,
- NULL);
- XtAddCallback(onOff[i][1],XmNarmCallback,toggleOnCB,(XtPointer)i);
-
- XtVaCreateManagedWidget(toggles[i],
- xmLabelGadgetClass,rc,
- NULL);
-
- }
-
- buttonRC = XtVaCreateManagedWidget("buttonRC",
- xmRowColumnWidgetClass, buttonFrame,
- XmNpacking, XmPACK_TIGHT,
- XmNmarginWidth, 0,
- XmNmarginHeight, 0,
- NULL);
-
- for (i=0;i<XtNumber(buttons);i++) {
- tb = XtVaCreateManagedWidget(buttons[i],
- xmPushButtonWidgetClass, buttonRC,
- XmNspacing, 2,
- NULL);
- XtAddCallback(tb,XmNactivateCallback,buttonCB,(XtPointer)i);
- }
-
- }
-
- static void
- toggleOffCB(w,i)
- Widget w;
- int i;
- {
- switch(i) {
- case 0 :
- animation(0);
- doTumble = 0;
- drawScene();
- break;
- }
- }
-
- static void
- toggleOnCB(w,i)
- Widget w;
- int i;
- {
- switch(i) {
- case 0 :
- animation(1);
- doTumble = 1;
- drawScene();
- break;
- }
- }
-
-
- void
- buttonCB(w,which)
- Widget w;
- int which;
- {
- switch(which) {
- case 0 :
- resetView();
- drawScene();
- break;
- case 1 :
- doExit();
- break;
- }
- }
-
-
-
- static void
- lmodelCB(w,which)
- Widget w;
- int which;
- {
- switch(which) {
- case 0 :
- curLModel = LTM_INFINITE;
- drawScene();
- break;
- case 1 :
- curLModel = LTM_LOCAL;
- drawScene();
- break;
- case 2 :
- curLModel = LTM_INF_TWO;
- drawScene();
- break;
- }
- }
-
- static void
- matCB(w,which)
- Widget w;
- int which;
- {
- switch(which) {
- case 0 :
- curMatSet = MAT_BRASS;
- drawScene();
- break;
- case 1 :
- curMatSet = MAT_SILVER;
- drawScene();
- break;
- }
- }
-
- static void
- lightCB(w,which)
- Widget w;
- int which;
- {
- switch(which) {
- case 0 :
- curLight = LT_INF_WHITE;
- lmbind(LIGHT0,curLight);
- drawScene();
- break;
- case 1 :
- curLight = LT_INF_RED;
- lmbind(LIGHT0,curLight);
- drawScene();
- break;
- }
- }
-
- static void
- resetView(w)
- Widget w;
- {
- anglex = anglez = 0.;
- angley = 90.0;
- }
-